import type { ShortcutHandler } from "@tauri-apps/api/globalShortcut";
import type { KeyCode } from "@/lib/keyboard";

/**
 * 快捷按键需要的按键状态
 */
export interface ShortcutState {
    /**
     * 是否按下了 ctrl
     */
    ctrl: boolean;

    /**
     * 是否按下了 shift
     */
    shift: boolean;

    /**
     * 是否按下了 alt
     */
    alt: boolean;

    /**
     * 是否按下了 meta
     * 注意：当前没有使用
     */
    meta: boolean;

    /**
     * 按下的按键
     */
    keyCode: KeyCode;
}

/**
 * 快捷键配置项
 */
export interface ShortcutItem {
    /**
     * 是否可用
     */
    used: boolean;

    /**
     * 快捷键的名称
     */
    name: string;

    /**
     * 快捷键的键值
     * 例如："Ctrl+Shift+A"
     */
    shortcut: ShortcutState;

    /**
     * 快捷键的备选键值
     * 例如："Ctrl+Shift+A"
     */
    alternative: ShortcutState;

    /**
     * 本地存储的文件名
     */
    fileName: string;

    /**
     * 快捷键的描述
     */
    description: string;

    /**
     * 快捷键的处理函数
     */
    handler: ShortcutHandler;
}

/**
 * 判断 value 是否为 ShortcutState 类型
 * @param value 待检查的值
 * @returns 是否为 ShortcutState 类型
 */
export function isShortcutState(value: any): value is ShortcutState {
    return (
        typeof value === "object" &&
        value !== null &&
        typeof value.ctrl === "boolean" &&
        typeof value.shift === "boolean" &&
        typeof value.alt === "boolean" &&
        typeof value.meta === "boolean" &&
        typeof value.keyCode === "number"
    );
}
